﻿//#include<iostream>
//using namespace std;

//int main()
//{
//	int a = 0;
//	int& b = a;
//	int c = a;
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//	cout << b << endl;
//	cout << c << endl;
//
//	b++;//b++的同时a++了吗？c++了吗？
//	cout << a << endl;
//	cout << b << endl;
//	cout << c << endl;
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	int& b = a;
//	int& c = b;
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//
//	//❌double& b=a;类型必须一致
//	return 0;
//}


//int main()
//{
//	int a = 0;
//	//1.引用必须初始化
//	//int& b;
//	//b = a;
//
//	//2.引用定义后，不能改变指向
//	int& b = a;
//	int c = 2;
//	b = c;//这是不是改变指向，而是赋值
//	cout << a << endl;//2
//    cout << b << endl;//2
//	
//	//3.一个变量可以有多个引用，多个别名
//	//定义别名的别名
//	int& x = a;
//	int& d = c;
//
//
//	return 0;
//}


//双向无头链表
//typedef struct Node
//{
//	struct Node* next;
//	struct Node* prev;
//	int val;
//}LNode,*PNode;
//
//void PushBack(PNode* phead, int x)
//void PushBack(PNode& phead, int x)
//{
//	
//}
//int main()
//{
//	PNode pphead;
//	PushBack(pphead, 1);
//}

//
//int* preorderTraversal(struct TreeNode* root, int* returnSize)
//int* preorderTraversal(struct TreeNode* root, int& returnSize) 



//#include <time.h>
//struct A { int a[10000]; };
//void TestFunc1(A a) {}
//void TestFunc2(A& a) {}
//void main()
//{
//	A a;
//	// 以值作为函数参数
//	size_t begin1 = clock();
//	for (size_t i = 0; i < 10000; ++i)
//		TestFunc1(a);
//	size_t end1 = clock();
//	// 以引用作为函数参数
//	size_t begin2 = clock();
//	for (size_t i = 0; i < 10000; ++i)
//		TestFunc2(a);
//	size_t end2 = clock();
//
//	// 分别计算两个函数运行结束后的时间
//	cout << "TestFunc1(A)-time:" << end1 - begin1 << endl;
//	cout << "TestFunc2(A&)-time:" << end2 - begin2 << endl;
//}
//


//交换两个变量
//
//#include<iostream>
//using namespace std;
//
//void Swap(int* p1, int* p2)
//{
//	int tmp = *p1;
//	*p1 = *p2;
//	*p2 = tmp;
//}
//int main()
//{
//	int x = 10;
//	int y = 20;
//	cout << "x=" << x << endl;
//	cout << "y=" << y << endl;
//	Swap(&x, &y);
//	cout << "x=" << x << endl;
//	cout << "y=" << y << endl;
//	return 0;
//}


//void Swap(int& p1, int& p2)
//{
//	int tmp = p1;
//	p1 = p2;
//	p2 = tmp;
//}
//int main()
//{
//	int x = 10;
//	int y = 20;
//	cout << "x=" << x << endl;
//	cout << "y=" << y << endl;
//	Swap(x, y);
//	cout << "x=" << x << endl;
//	cout << "y=" << y << endl;
//	return 0;
//}
//


//#include<iostream>
//using namespace std;
//
//int& func()
//{
//	int a = 0;
//	return a;
//}
//
//int& fx()
//{
//	int b = 1;
//	return b;
//}
//
//int main()
//{
//	int ret = func();
//	cout << ret << endl;
//
//	fx();
//	cout << ret << endl;
//
//	return 0;
//}


////C++
//#include<iostream>
//#include<assert.h>
//using namespace std;
//struct SeqList
//{
//	//成员变量
//	int* a;
//	int size;
//	int capacity;
//
//	//成员函数
//	void Init()
//	{
//		a = (int*)malloc(sizeof(int) * 4);
//		// ...
//		size = 0;
//		capacity = 4;
//	}
//
//	void PushBack(int x)
//	{
//		 //... 扩容
//		a[size++] = x;
//	}
//
//	 //读写返回变量
//	int& Get(int pos)
//	{
//		assert(pos >= 0);
//		assert(pos < size);
//
//		return a[pos];
//	}
//
//	int& operator[](int pos)
//	{
//		assert(pos >= 0);
//		assert(pos < size);
//
//		return a[pos];
//	}
//};
//
//int main()
//{
//	SeqList s;
//	s.Init();
//	s.PushBack(1);
//	s.PushBack(2);
//	s.PushBack(3);
//	s.PushBack(4);
//
//	for (int i = 0; i < s.size; i++)
//	{
//		//cout << s.Get(i)<< " ";
//		cout << s[i] << " ";
//		//cout << s.operator[](i) << " ";
//	}
//	cout << endl;
//
//	for (int i = 0; i < s.size; i++)
//	{
//		/*if (s.Get(i) % 2 == 0)
//		{
//			s.Get(i) *= 2;
//		}*/
//		if (s[i] % 2 == 0)
//		{
//			s[i] *= 2;
//		}
//	}
//	cout << endl;
//
//	for (int i = 0; i < s.size; i++)
//	{
//		cout << s.Get(i) << " ";
//	}
//	cout << endl;
//
//	return 0;
//}


//#include <time.h>
//struct A { int a[10000]; };
//A a;
//// 值返回
//A TestFunc1() { return a; }
//// 引用返回
//A& TestFunc2() { return a; }
//void main()
//{
//	// 以值作为函数的返回值类型
//	size_t begin1 = clock();
//	for (size_t i = 0; i < 100000; ++i)
//		TestFunc1();
//	size_t end1 = clock();
//	// 以引用作为函数的返回值类型
//	size_t begin2 = clock();
//	for (size_t i = 0; i < 100000; ++i)
//		TestFunc2();
//	size_t end2 = clock();
//	// 计算两个函数运算完成之后的时间
//	cout << "TestFunc1 time:" << end1 - begin1 << endl;
//	cout << "TestFunc2 time:" << end2 - begin2 << endl;
//}


//int main()
//{
//	int a = 10;
//	int& ra = a;
//	cout << "&a = " << &a << endl;
//	cout << "&ra = " << &ra << endl;
//	return 0;
//}


//int main()
//{
//	int a = 10;
//	int& ra = a;
//	ra = 20;
//	int* pa = &a;
//	*pa = 20;
//	return 0;
//}